package com.itheima.genericity3;

import java.util.ArrayList;

public class Test {

    public static void main(String[] args) {

        //泛型支持的类型：不支持基本数据类型，只支持对象类型（引用数据类型）
        //集合也是

        //泛型擦除：泛型工作在编译阶段，等编译后泛型就没用了，所以泛型在编译后都会被擦除，所有类型都会被替换为Object
        //而Object是对象类型

        //包装类：Integer、Double、Boolean、Character、Long、Short、Byte、Float
        //作用：把基本类型的数据包装成对象类型

        //如何把基本数据类型转换成包装类对象？
        //手工包装：
        //Integer i = new Integer(100);     //过时的写法
        Integer i = Integer.valueOf(100);       //推荐写法
        Integer j = Integer.valueOf(100);       //-128 ~ 127已经放入缓存，不会新建对象，直接从缓存中获取
        System.out.println(i == j);

        //自动装箱：基本数据类型可以直接转换成包装类对象，不需要额外做任何操作
        Integer k = 100;
        Integer l = 100;
        System.out.println(k == l);

        //自动拆箱：包装类对象可以直接给基本数据类型
        int m = k;
        System.out.println(m);

        ArrayList<Integer> list = new ArrayList<>();
        list.add(100);      //自动装箱
        list.add(200);
        int rs = list.get(0);    //自动拆箱

        System.out.println("========================");

        //包装类的功能：
        //1. 把基本数据类型转换成字符串类型；（基本没用）
        int n = 100;

        String rs1 = Integer.toString(n);
        System.out.println(rs1 + 1);

        Integer n1 = n;
        String rs2 = n1.toString();
        System.out.println(rs2 + 1);

        String str = n + "";
        System.out.println(str + 1);

        //2. 把字符串类型转换成基本数据类型；（有用）
        String str1 = "100";
        //int rs3 = Integer.parseInt(str1);
        //或：
        int rs3 = Integer.valueOf(str1);
        System.out.println(rs3 + 1);

    }
}
